home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’96 / Booting Gallery / Booting Gallery (source) / (Libraries) / Fluent Libraries / Queue Objects / ObjectQueue.h < prev    next >
Encoding:
Text File  |  1996-06-22  |  1.4 KB  |  94 lines  |  [TEXT/BROW]

  1. // ObjectQueue.h
  2. // Created by Bill Hubauer on Wed, May 24, 1995 @ 7:23 AM.
  3.  
  4. #ifndef __ObjectQueue__
  5. #define __ObjectQueue__
  6.  
  7.  
  8.  
  9. class CQIterator;
  10.  
  11.  
  12. class MQueueElem
  13. {
  14.     friend class CObjectQueue;
  15. public:
  16.     MQueueElem();
  17.     virtual ~MQueueElem() {}
  18.     
  19.     MQueueElem*        Next();
  20.     
  21. protected:
  22.     
  23.     struct Elem {
  24.         QElemPtr    qLink;
  25.         short        qType;
  26.         MQueueElem*    qObject;
  27.     };
  28.     
  29.     Elem    _elem;
  30.     
  31. };
  32.  
  33.  
  34. class CObjectQueue
  35. {
  36.     friend class CQIterator;
  37. public:
  38.     CObjectQueue();
  39.     virtual ~CObjectQueue();
  40.     
  41.     UInt32    GetNumElems()                {return _numElems;}
  42.     void    Enqueue(MQueueElem*        elem);
  43.     void    Dequeue(MQueueElem*        elem);
  44.     
  45.     void    DequeueAll(); 
  46.     
  47.     MQueueElem*            FirstElem();
  48.     MQueueElem*            Tail();
  49.     
  50. protected: 
  51.     
  52.     UInt32        _numElems;
  53.  
  54.     CQIterator*    FirstIter()            {return (CQIterator*)((MQueueElem::Elem*)_iters.qHead)->qObject;}
  55.     void    RemoveIterator(CQIterator* iter);
  56.     void    AddIterator(CQIterator* iter);
  57.     
  58.     QHdr            _queue;
  59.     QHdr            _iters;
  60. };
  61.  
  62.  
  63.  
  64.  
  65. class CQIterator : public MQueueElem
  66. {
  67.     friend class CObjectQueue;
  68.     
  69. public:
  70.     CQIterator();
  71.     CQIterator(CObjectQueue&    queue);
  72.     virtual ~CQIterator();
  73.     
  74.     void    SetQueue(CObjectQueue*    queue);
  75.  
  76.     Boolean            MoreQ()        {return _curElem != NULL;}
  77.     MQueueElem*        GetNext();
  78.     
  79. protected:
  80.     void            ElemQueued(MQueueElem* elem);
  81.     void            ElemDequeued(MQueueElem* elem);
  82.     void            QueueEmpty();
  83.     void            QueueDestroyed();
  84. protected:
  85.     void            Init();
  86.     
  87.     CObjectQueue*        _queue;
  88.     MQueueElem*            _curElem;    
  89. };
  90.  
  91.  
  92.  
  93. #endif
  94.